package com.frcdi.qms.masterdata.mapper;

import java.util.List;
import com.frcdi.qms.common.core.domain.entity.MaterialType;
import org.apache.ibatis.annotations.Param;

/**
 * 物料类型Mapper接口
 *
 * @author frcdi.qms
 * @date 2023-09-08
 */
public interface MaterialTypeMapper
{
    /**
     * 查询物料类型
     *
     * @param id 物料类型主键
     * @return 物料类型
     */
    public MaterialType selectMaterialTypeById(Long id);

    /**
     * 查询物料类型列表
     *
     * @param materialType 物料类型
     * @return 物料类型集合
     */
    public List<MaterialType> selectMaterialTypeList(MaterialType materialType);

    /**
     * 新增物料类型
     *
     * @param materialType 物料类型
     * @return 结果
     */
    public int insertMaterialType(MaterialType materialType);

    /**
     * 修改物料类型
     *
     * @param materialType 物料类型
     * @return 结果
     */
    public int updateMaterialType(MaterialType materialType);

    /**
     * 删除物料类型
     *
     * @param id 物料类型主键
     * @return 结果
     */
    public int deleteMaterialTypeById(Long id);

    /**
     * 批量删除物料类型
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMaterialTypeByIds(Long[] ids);

    /**
     * 校验物料类型名称是否唯一
     *
     * @param materialTypeName 物料类型名称
     * @param parentId 父部门ID
     * @return 结果
     */
    public MaterialType checkMaterialTypeNameUnique(@Param("materialTypeName") String materialTypeName, @Param("parentId") Long parentId);

    /**
     * 是否存在子节点
     *
     * @param id ID
     * @return 结果
     */
    public int hasChildById(Long id);

    /**
     * 根据ID查询所有子类型列表
     *
     * @param id ID
     * @return 子类型列表
     */
    public List<MaterialType> selectChildrenId(Long id);

    /**
     * 修改子元素关系
     *
     * @param materialTypes 子元素
     * @return 结果
     */
    public int updateMaterialTypeChildren(@Param("MaterialTypes") List<MaterialType> materialTypes);

    /**
     * 查询物料类型是否存在物料
     *
     * @param id 物料类型ID
     * @return 结果 true 存在 false 不存在
     */
    public int checkMaterialTypeExistMaterial(Long id);
}
